<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>JavaScript Set</title>
</head>
<body>


</body>

<script>

    // 创建一个 Set
    const letters = new Set();
    // 向 Set 添加值
    letters.add("a");
    letters.add("b");
    letters.add("c");
    letters.add("c");


    // 列出所有元素
    let text = "";
    for (const x of letters) {
        text += x;
    }

    console.log(typeof letters);      // 返回 object
    //Set 是 ES6 的特性（JavaScript 2015）。

    console.log(letters instanceof Set);   // 返回 true
    //mark 如果指定值存在于 Set 中，has() 方法返回 true。
    // Set 中是否包含 "c"？
    console.log(letters.has("c"));
    // Set 中是否包含 "d"？
    console.log(letters.has("d"));


    text = "";
    //mark  forEach 方法 ,  为每个 Set 元素调用一个函数： 迭代操作所有元素;  这里貌似不能  break
    letters.forEach(function (value) {
        if (value === 'b') {
            // break ;
        }
        text += value;

    });

    console.log(text);


    /* 创建迭代器  方法返回一个包含 Set 中值的迭代器对象：
    注意： Set 没有键，因此 keys() 返回与 values() 相同的内容。这使得 Set 与 Map 兼容。
    */
    const keys = letters.keys();

    // 列出所有元素
    text = "";
    for (const x of keys) {
        text += x;
    }
    console.log(text);

    /*
    * entries() 方法通常用于返回对象的 [key, value] 对。由于 Set 没有键，因此 entries() 返回 [value, value]。这使得 Set 与 Map 兼容。
    * */
    // 获取所有条目
    const entries = letters.entries();

    // 列出所有条目

    for (const entry of entries) {
        console.log( 'entry ==> '  ,  entry  );   //  example:  entry ==>   ['a', 'a']
    }



</script>


</html>
